package com.xiaoq.sites.service;

import java.util.List;
import java.util.Map;

import com.xiaoq.sites.entity.SitesAnnouncementEntity;
import com.xiaoq.sites.entity.SitesEntity;
import com.xiaoq.sites.entity.SitesHotSearchEntity;
import com.xiaoq.sites.entity.SitesPointEntity;
import com.xiaoq.sites.entity.SitesRouteEntity;
import com.xiaoq.sites.entity.SitesRoutePointEntity;
import com.xiaoq.sites.vo.*;
import com.xiaoq.vo.PagingVo;

public interface ISitesService {
	
	public boolean findPointName(String pointName,String sitesId);
	
	/**
	 * 根据线路ID查询，该线路所经过的景点ID关联表
	 * @param sitesId
	 * @return
	 */
	public List<SitesRoutePointEntity> findSitesRoutePointByRouteId(String routeId);
	
	public SitesEntity findById(String id);

	/**
	 *  根据景点ID查询景点
	 * @param pointId
	 * @return
	 */
	SitesPointEntity findSitesPointByPointId(String pointId);
	
	/**
	 * 根据景区ID查找该景区的所有景点
	 */
	public List<SitesPointEntity> findSitesPointListBySitesId(String sitesId);
	
	/**
	 * 根据线路ID,查找该线路经过的所有景点
	 */
	public List<SitesPointEntity> findSitesPointListByRouteId(String routeId);
	
	/**
	 * 根据线路ID List,查找该线路经过的所有景点
	 * @param routeIdList  线路ID List
	 * @return Map<String,List<SitesPointEntity>>  key:routeId,value为routeId对应的景点
	 */
	public Map<String,List<SitesPointEntity>> findSitesPointMapByRouteIdList(List<String> routeIdList);
	
	/**
	 * 根据景区ID查找该景区的所有公告
	 */
	public List<SitesAnnouncementEntity> findSitesAnnouncementListBySitesId(String sitesId);
	
	public List<SitesRouteEntity> findSitesRouteListBySitesId(String sitesId);
	
	
	//*************************es api begin******************************
	
	/**
	 * @param cityCode 城市编码
	 * @param keyWord 搜索关键字
	 * @param page 当前第几页
	 * @param size 每页显示的条数
	 * @return
	 */
	public List<SitesEntity> findSitesFromESByCityCodeAndKeyWord(String cityCode, String keyWord,int page,int size);

	/**
	 *  搜索关键词补齐
	 * @param searchTxt 搜索的关键字
	 * @return  
	 * TODO 暂时通过name去ES里查，暂不用es suggest
	 */
	public List<SitesEntity> findSitesFromESBySearchTxt(String searchTxt);
	
	//*************************es api end******************************
	
	/**
	 * 添加一个景点
	 * @param sitesPointEntity
	 * @return
	 */
	public boolean addSitesPoint(SitesPointEntity sitesPointEntity);
	
	/**
	 * 添加一个景区
	 * @param sitesEntity
	 * @return
	 */
	public boolean addSites(SitesEntity sitesEntity);
	
	/**
	 * 删除一个景点
	 * @param pointId
	 * @return
	 */
	public boolean delSitesPoint(String pointId);
	
	/**
	 * 对景点进行更新
	 * @param sitesPointEntity
	 * @return
	 */
	public boolean updateSitesPoint(SitesPointEntity sitesPointEntity);
	
	/**
	 * 按景点名称模糊查询景点
	 * @param pointName
	 * @return
	 */
	public List<SitesPointEntity> findByPointNameVag(String pointName,String sitesId);
	
	/**
	 * 按景点名称去查询一个景点
	 * @param pointName
	 * @return
	 */
	public SitesPointEntity findByPointName(String pointName);
	
	public boolean updateSites(SitesEntity sitesEntity);
	
	/**
	 * 删除一个景区
	 * @param sitesId
	 * @return
	 */
	public boolean delSites(String sitesId);
	
	/**
	 *  保存热搜词
	 * @param sitesHotSearch
	 */
	public void addSitesHotSearch(SitesHotSearchEntity sitesHotSearch);
	
	/**
	 * 获取热搜词列表
	 */
	List<SitesHotSearchEntity> getSitesHotSearchList();
	
	/**
	 * 根据城市code 获取景区列表
	 * @param zoneCity
	 * @return
	 */
	List<SitesEntity> findSitesListbyZoneCity(String zoneCity,String zoneDistrict);
	
	/**
	 * 根据景区Id修改景区状态
	 * @param sitesId
	 * @param authenStatus
	 * @return
	 */
	public boolean updateAuthenStatus(String sitesId,String authenStatus);

	/**
	 *  对应搜索的一级页面,返回通用字段
	 * @param title
	 * @param pagingVo
	 * @return SearchResultVo
	 */
	List<SearchResultVo> findContentFromEsByTitle(String title, PagingVo pagingVo);

	/**
	 * @param title
	 * @param pagingVo
	 * @return ContentSearchVo
	 */
	List<ContentSearchVo> findContentSearchFromEsByTitle(String title, PagingVo pagingVo);

	/**
	 *  对应搜索的一级页面,返回通用字段
	 * @param name
	 * @param pagingVo
	 * @return SearchResultVo
	 */
	List<SearchResultVo> findTicketFromEsByName(String name, PagingVo pagingVo);
	/**
	 * @param name
	 * @param pagingVo
	 * @return TicketSearchVo
	 */
	List<TicketSearchVo> findTicketSearchFromEsByName(String name, PagingVo pagingVo);





	/**
	 * 对应搜索的一级页面,返回通用字段
	 * @param title
	 * @param pagingVo
	 * @return SearchResultVo
	 */
	List<SearchResultVo> findActivityFromEsByTitle(String title, PagingVo pagingVo);

	/**
	 * @param title
	 * @param pagingVo
	 * @return ActivitySearchVo
	 */
	List<ActivitySearchVo> findActivitySearchFromEsByTitle(String title, PagingVo pagingVo);

	/**
	 * 对应搜索的一级页面,返回通用字段
	 * @param title
	 * @param pagingVo
	 * @return
	 */
	List<SearchResultVo> findSitesFromEsByTitle(String title, PagingVo pagingVo);

	/**
	 * @param title
	 * @param pagingVo
	 * @return SitesSearchVo
	 */
	List<SitesSearchVo> findSitesSearchFromEsByTitle(String title, PagingVo pagingVo);

	/**
	 * 对应搜索的一级页面,返回通用字段
	 * @param name
	 * @param pagingVo
	 * @return
	 */
	List<SearchResultVo> findZoneMasterFromEsByName(String name, PagingVo pagingVo);

	/**
	 *  获取景点搜索
	 * @param name
	 * @return
	 */
	List<SitesPointEntity> findSitesPointFromEsByName(String name, PagingVo pagingVo);

	/**
	 *  获取景点搜索
	 * @param name
	 * @return
	 */
	List<SearchResultVo> findSitesPointResultFromEsByName(String name, PagingVo pagingVo);

	/**
	 * 查询景区的数量
	 * @param zoneCity 城市编码（市级）
	 * @param sitesStatus 景区状态 见（ConstantUtil）
	 * @return
	 */
	long count(String zoneCity,String zoneDistrict,String sitesStatus);

	List<SitesEntity> getAllSites();
	
	/**
	 * 根据景区ID查询必玩景点
	 * @param sitesId
	 * @return
	 */
	public List<SitesPointEntity> findMPlayPointBySitesId(String sitesId);
	
	/**
	 * 按景区名称查询景区
	 * @param name
	 * @return
	 */
	public List<SitesEntity> findByName(String name);

	/**
	 * 根据经纬度查询附近多少米范围内的景点
	 * @param latitude 经度
	 * @param longitude 纬度
	 * @param nearM 附近多少米、
	 * @param pagingVo 分页参数
	 * @return
	 */
	List<SitesPointEntity> getSitesPointByPoint(double latitude, double longitude, long nearM, PagingVo pagingVo);

	/**
	 * 根据经纬度查询附近多少米范围内的景区
	 * @param latitude 经度
	 * @param longitude 纬度
	 * @param nearM 附近多少米
	 * @param pagingVo 分页参数
	 * @return
	 */
	List<SitesEntity> getSitesByPoint(double latitude, double longitude, long nearM, PagingVo pagingVo);
	
	public SitesEntity findSitesByMerchantId(String merchantId);
}
